www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/send_process.m
function sendSymb = send_process(iUE) % 发端处理流程 % 基站的基带处理函数,该函数仅用户数据信道,PDSCH处理流程为: % 产生信息-->CRC校验-->码块分割-->turbo编码-->速率匹配 % -->加扰-->层映射-->预编码-->子载波映射-->OFDM调制-->天线映射 % 根据时域信道或频域信道,输出sendSymb代表时域符号或频域载波映射后符号 % Author: 程式小组(徐萌 张妙 张晓庆) % Date: 2010-07-11 % ========================================================== global LTE_par CP = LTE_par.CP; % 循环前缀长度 nTx = LTE_par.BS_par.nAnt; % 基站端天线数 nTB = LTE_par.UE_par.nCW(iUE); % iUE的TB数 RNTI = LTE_par.UE_par.RNTI; % 无线网络临时指示 nLayer = LTE_par.UE_par.nLayer(iUE); % iUE的层数 sizeTB = LTE_par.UE_par.sizeTB(:,iUE); % iUE的传输块大小 cellID = LTE_par.BS_par.cellID; % 小区ID号 iSubFrame = LTE_par.iSubFrame; % 当前子帧号 取值为0~9 FFT_SIZE = LTE_par.FFT_SIZE; % FFT变换点数 transMod = LTE_par.UE_par.transMod; % 传输模式 1~7 preProcess = LTE_par.UE_par.preProcess; % 预处理模式 1:singleAnt,2:tranmitDiversity 3:spatialMultiplexing PMI = LTE_par.UE_par.PMI(iUE); % 第iUE个用户的预编码码本索引 M_0_SYMB = LTE_par.UE_par.M_0_SYMB(iUE);% 码字0调制符号数 modSymbCell = cell(nTB,1); % 为发端复值调制符号分配空间 f = []; % ============ 信息生成 ======================== sendInfoBit = info_gen(sizeTB); for iTB = 1:nTB % 调制方式对应的阶数 Qm = LTE_par.UE_par.Qm(iTB,iUE); % =========== 码块分割 ===================== segBit = codeblock_segment(sendInfoBit{iTB},iUE,iTB); % 获取当前用户CB数 nCB = LTE_par.UE_par.nCB(iTB,iUE); for iCB = 1:nCB % ========== Turbo 编码 ================ encodeBit = turbo_encoder(segBit{iCB}); % ========== 速率匹配 ================== rateMatchBit = rate_match(encodeBit,iUE,iTB,iCB); % ========== 码块级联 ================== f = cat(2,f,rateMatchBit); end % ============== 加扰 ====================== [scrambleBit] = scramble(f,iTB,RNTI,iSubFrame,cellID); % ============== 调制 ====================== modSymb = modulation(scrambleBit,Qm); modSymbCell{iTB} = modSymb; f = []; end % 码字1调制符号数 LTE_par.UE_par.M_0_SYMB(iUE) = length(modSymbCell{1}); % ================= 层映射 ================================== layerSymb = layer_mapping(modSymbCell,nTB,nLayer,preProcess); % ================= 预编码 ================================== precodedSymb = precoding(layerSymb,preProcess,transMod,nTx,PMI,M_0_SYMB); % ================ 子载波映射 =============================== % 得到天线端口上资源格形式的复值符号 % 输出为cell类型 举例:mapSymbCell{iTx}(iCarr,iOfdm) mapSymbCell = sub_carr_mapping(precodedSymb,iUE); % ================ 频谱搬移 ================================ % 频域位置交换{B A}-->{A B} for iTx = 1:nTx mapSymbCell{iTx} = [mapSymbCell{iTx}(FFT_SIZE/2+1:FFT_SIZE,:);mapSymbCell{iTx}(1:FFT_SIZE/2,:)]; end % =============== OFDM符号生成 ============================= ofdmSymb = ofdm_generation(mapSymbCell,FFT_SIZE,nTx,CP); % 根据添加的是时域信道还是频域信道,选择输出符号是否经过OFDM if LTE_par.channelFreq == false % 时域信道 输出OFDM调制符号 sendSymb = ofdmSymb; else % 发端子载波映射后的频域符号 sendSymbFreq = zeros(nTx,FFT_SIZE,length(CP)); for iTx = 1:nTx sendSymbFreq(iTx,:,:) = mapSymbCell{iTx}; end sendSymb = sendSymbFreq; % 发端频谱搬移后的符号 end